import { craeteEffect, effectTypes } from './helper'
import runSaga from '../runSaga'
import Task from '../Task'

/**
 * fork 开启一个新的任务，且不会阻塞, 
 * 返回一个task 对象 可以取消当前fork
 * @export
 * @param {*} generator 生成器函数
 * @param {*} args 额外参数
 */
export function fork(generator, ...args) {
    return craeteEffect(effectTypes.FORK, { generator, args })
}

/**
 * 处理 fork effect 
 * @export
 * @param {*} env
 * @param {*} effect
 * @param {*} next
 */
export function runForkEffect(env, effect, next) {
    const { payload: { generator, args } } = effect

    // 启动一个新的任务
    const task = runSaga(env, generator, ...args)
    next(task)
}